home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / sbin / update-openoffice-dicts < prev    next >
Text File  |  2008-06-04  |  7KB  |  208 lines

  1. #!/usr/bin/perl -w
  2.  
  3. # update-openoffice-dicts -- update OpenOffice.org's dictionary.lst
  4. # (c) 2003-2007 
  5. #     RenΘ Engelhard <rene@debian.org>,
  6. #     Agustin Martin Domingo <agmartin@debian.org>
  7. # Public Domain
  8.  
  9. use Debian::DictionariesCommon q(dico_checkroot);
  10.  
  11. @print_comments=("## List of All Dictionaries to be Loaded by OpenOffice.org",
  12. "## ---------------------------------------------------",
  13. "## Each Entry in the list have the following space delimited fields",
  14. "##",
  15. "## Field 1: Entry Type \"DICT\" - spellchecking dictionary",
  16. "##                     \"HYPH\" - hyphenation dictionary",
  17. "##                     \"THES\" - thesaurus files",
  18. "##",
  19. "## Field 2: Language code from Locale \"en\" or \"de\" or \"pt\" ...",
  20. "##",
  21. "## Field 3: Country Code from Locale \"US\" or \"GB\" or \"PT\"",
  22. "##",
  23. "## Field 4: Root name of file(s) \"en_US\" or \"hyph_de\" or \"th_en_US\"",
  24. "##          (do not add extensions to the name)",
  25. "##",
  26. "## This file is automatically updated by update-openoffice-dicts script",
  27. "##",
  28. "");
  29.  
  30. # -------------------------------------------------------------------------
  31. sub write_manually_added() {
  32. # -------------------------------------------------------------------------
  33. # put all entries not in the automatic section in the new dictionary.lst
  34. # file (manually added dictionaries by the user)
  35. # -------------------------------------------------------------------------
  36.     my $line;
  37.     my $inheader = 1;
  38.     open(DL_ORIG, "$dictionary_lst") # open the existing file for reading...
  39.     or die("Opening $dictionary_lst failed.\n");
  40.     while (<DL_ORIG>) {
  41.     chomp;
  42.     $line = $_;
  43.     undef $inheader if not m/^\#/;
  44.     
  45.     push @dictionary_orig,$line; # save original file
  46.     
  47.     if ($line eq $begin_string) {
  48.         # if we find the start of the section; set the flag that we are
  49.         # in the automatic section, ignore the following lines ...
  50.         $we_are_in_auto=1;
  51.         next;
  52.     } elsif ($line eq $end_string) {
  53.         # ... until we find the end and set the flag back.
  54.         $we_are_in_auto=0;
  55.         next;
  56.     } elsif ($we_are_in_auto == 0) {
  57.         # we are in non-automatic section; copy the user added entries
  58.         # into the temporary array; but that only if the line is not a ##
  59.         # comment or no blank line
  60.         next if $line =~ /^\#\#/;
  61.         next if $line =~/^\s*$/;
  62.         if ($inheader) {
  63.         next if $line =~ /^\#/;
  64.         }
  65.         push @dictionary_new, $line;
  66.     }
  67.     }
  68.     close(DL_ORIG);
  69. }
  70.  
  71. # -------------------------------------------------------------------------
  72. sub build_automatic_section() {
  73. # -------------------------------------------------------------------------
  74. # Read all files in $myspellinfos and $hunspellinfos and return their
  75. # contents verbatim for the new dictionary.lst, with $hunpellinfos prevailing
  76. # -------------------------------------------------------------------------
  77.     my $auto_text    = "";
  78.     my %auto_entries = ();
  79.     my @all_infos    = (<$myspellinfos/*>,<$hunspellinfos/*>);
  80.     
  81.     foreach $infofile ( @all_infos ) {
  82.     next if $infofile =~ m/.*~$/; # Skip backup copies
  83.     my @tmpinfo = ();
  84.     my $locale  = $infofile;
  85.     $locale     =~ s/^.*\///;
  86.     $locale     =~ s/^(hunspell|myspell)-//;
  87.     open(ENTRY,"$infofile");
  88.     while (<ENTRY>){              # Some info files might have no final
  89.         chomp;                    # newline.
  90.         push @tmpinfo, $_;        # This should uniformize everything.
  91.     }
  92.     close(ENTRY);
  93.     $auto_entries{$locale} = join("\n",@tmpinfo);
  94.     }
  95.     
  96.     $auto_text .= "$begin_string\n";
  97.     $auto_text .= "$str_instruct_add\n";
  98.     foreach ( sort keys %auto_entries ){
  99.     $auto_text .= $auto_entries{$_} . "\n";
  100.     }
  101.     $auto_text .= "$end_string\n\n";
  102.     return $auto_text;
  103. }
  104.  
  105. # -------------------------------------------------------------------------
  106. sub write_dictionary_lst() {
  107. # -------------------------------------------------------------------------
  108. # Write dictionary.lst, make backup of previous one if present and fix
  109. # file permissions. If in dryrun mode will only print result to stdout.
  110. # -------------------------------------------------------------------------
  111.     push @dictionary_new, @print_comments;
  112.     push @dictionary_new, &build_automatic_section();
  113.  
  114.     if ( -e $dictionary_lst ) {
  115.             $we_are_in_auto=0;
  116.             write_manually_added();
  117.     }
  118.     
  119.     if ( $dryrun ){
  120.         open(NEWFILE, "> /dev/stdout") # Write results to stdout.
  121.         or die("Opening STDOUT failed.\n");
  122.     } else {
  123.         open(NEWFILE, "> $dictionary_lst") # open the existing file for writing.
  124.         or die("Opening $dictionary_lst failed.\n");
  125.     }
  126.     foreach (@dictionary_new) { print NEWFILE $_, "\n"; }
  127.     close(NEWFILE);
  128.  
  129.     return if $dryrun;
  130.     
  131.     open(OLDFILE, "> $dictionary_lst.old") # open the backup file for writing
  132.         or die("Opening $dictionary_lst.old failed.\n");
  133.     foreach (@dictionary_orig) { print OLDFILE $_, "\n"; }
  134.     close(OLDFILE);
  135.     
  136.     # make sure the file has the right permissions
  137.     chown(0, 0, $dictionary_lst);
  138.     chmod(0644, $dictionary_lst);
  139. }
  140.  
  141. # --------------------------------------------------------------------
  142. # The main program
  143. # --------------------------------------------------------------------
  144.  
  145. $dictionary_lst   = "/etc/openoffice/dictionary.lst";
  146. $myspellinfos     = "/usr/share/myspell/infos/ooo";
  147. $hunspellinfos    = "/usr/share/openoffice/infos";
  148. $begin_string     = "## !!! BEGIN AUTOMATIC SECTION -- DO NOT CHANGE !!!";
  149. $end_string       = "## !!! END AUTOMATIC SECTION -- DO NOT CHANGE !!!";
  150. $str_instruct_add = "## !!! ADD YOUR ADDITIONAL ENTRIES BELOW THIS SECTION !!!";
  151. @dictionary_orig  = (); # The array with the original strings from dictionary.lst
  152. @dictionary_new   = (); # The array with the strings to go to new dictionary.lst
  153. $dryrun           = '';
  154.  
  155. $dryrun = 1 if ( $ARGV[0] && $ARGV[0] =~ m/^(-d|--dryrun)$/ );
  156.  
  157. $dryrun or dico_checkroot();
  158.  
  159. print STDOUT "Updating OpenOffice.org's dictionary list... ";
  160.  
  161. # we may need to create the dir...
  162. unless ( -d "/etc/openoffice" or $dryrun ) {
  163.     mkdir("/etc/openoffice",0755) || die "can't mkdir /etc/openoffice: $!\n";;
  164. }
  165.  
  166. write_dictionary_lst();
  167.  
  168. print STDOUT "done.\n";
  169.  
  170. __END__
  171.  
  172. =head1 NAME
  173.  
  174. update-openoffice-dicts - rebuild dictionary.lst for OpenOffice.org
  175.  
  176. =head1 SYNOPSIS
  177.  
  178. update-openoffice-dicts
  179.  
  180. =head1 DESCRIPTION
  181.  
  182. update-openoffice-dicts can be used to regenerate dictionary.lst for
  183. openoffice.  This script is run by myspell dictionaries when they are
  184. installed or removed.
  185.  
  186. It is not normally necessary to run update-openoffice-dicts by hand. 
  187. Packages containing dictionaries create a file in /usr/share/myspell/infos
  188. and call this script automatically.
  189.  
  190. update-openoffice-dicts will create a new dictionary.lst if it does not
  191. already exist.
  192.  
  193. =head1 FILES
  194.  
  195. /etc/openoffice/dictionary.lst, /usr/share/myspell/infos/ooo/*
  196.  
  197. =head1 SEE ALSO
  198.  
  199. openoffice(1), dictionary.lst(5)
  200.  
  201. =head1 AUTHORS
  202.  
  203. Rene Engelhard, Agustin Martin Domingo
  204.  
  205. =cut
  206.  
  207. #  LocalWords:  openoffice myspell dicts
  208.